package com.noizycat.ver2.activity;

import twitter4j.DirectMessage;
import twitter4j.StallWarning;
import twitter4j.Status;
import twitter4j.StatusDeletionNotice;
import twitter4j.TwitterStream;
import twitter4j.TwitterStreamFactory;
import twitter4j.User;
import twitter4j.UserList;
import twitter4j.UserStreamListener;
import twitter4j.conf.ConfigurationBuilder;
import android.app.Activity;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;

import com.noizycat.ver2.R;
import com.noizycat.ver2.dto.TweetDto;
import com.noizycat.ver2.util.TweetUtil;
import com.noizycat.ver2.util.UserUtil;
import com.noizycat.ver2.view.customListView.CustomListViewObject;
import com.noizycat.ver2.view.customListView.MainViewListPagerAdapter;

public class MainViewActivity extends Activity implements View.OnTouchListener {

    TwitterStream stream;
    CustomListViewObject item;
    CustomListViewObject item2;
    Handler handler = new Handler();
    private int touchPosition;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        item = new CustomListViewObject(this, "TL");
        item2 = new CustomListViewObject(this, "DM");
        Resources res = getResources();

        ConfigurationBuilder cb = new ConfigurationBuilder();
        cb.setDebugEnabled(true)
                .setOAuthConsumerKey(res.getString(R.string.c_key))
                .setOAuthConsumerSecret(res.getString(R.string.c_se_key))
                .setOAuthAccessToken(res.getString(R.string.acc_tkn))
                .setOAuthAccessTokenSecret(res.getString(R.string.acc_se_tkn));

        Log.d("log",
                "" + res.getString(R.string.c_key) + " : " + res.getString(R.string.c_se_key) + " : "
                        + res.getString(R.string.acc_tkn) + " : " + res.getString(R.string.acc_se_tkn));

        stream = new TwitterStreamFactory(cb.build()).getInstance();

        stream.addListener(new UserStreamListener() {

            @Override
            public void onException(Exception arg0) {

                // TODO 自動生成されたメソッド・スタブ

            }

            @Override
            public void onTrackLimitationNotice(int arg0) {

                // TODO 自動生成されたメソッド・スタブ

            }

            @Override
            public void onStatus(final Status status) {

                // TODO 自動生成されたメソッド・スタブ
                handler.post(new Runnable() {

                    @Override
                    public void run() {

                        // TODO 自動生成されたメソッド・スタブ
                        TweetDto tweetDto = TweetUtil.getTweetDto(status);
                        tweetDto.setTweetUser(UserUtil.getUserDto(status.getUser()));
                        item.add(tweetDto);
                        if (tweetDto.getTweetUser().getUserSID() % 2 == 0) {
                            item2.add(tweetDto);
                        }
                    }
                });

            }

            @Override
            public void onStallWarning(StallWarning arg0) {

                // TODO 自動生成されたメソッド・スタブ

            }

            @Override
            public void onScrubGeo(long arg0, long arg1) {

                // TODO 自動生成されたメソッド・スタブ

            }

            @Override
            public void onDeletionNotice(StatusDeletionNotice arg0) {

                // TODO 自動生成されたメソッド・スタブ

            }

            @Override
            public void onUserProfileUpdate(User arg0) {

                // TODO 自動生成されたメソッド・スタブ

            }

            @Override
            public void onUserListUpdate(User arg0, UserList arg1) {

                // TODO 自動生成されたメソッド・スタブ

            }

            @Override
            public void onUserListUnsubscription(User arg0, User arg1, UserList arg2) {

                // TODO 自動生成されたメソッド・スタブ

            }

            @Override
            public void onUserListSubscription(User arg0, User arg1, UserList arg2) {

                // TODO 自動生成されたメソッド・スタブ

            }

            @Override
            public void onUserListMemberDeletion(User arg0, User arg1, UserList arg2) {

                // TODO 自動生成されたメソッド・スタブ

            }

            @Override
            public void onUserListMemberAddition(User arg0, User arg1, UserList arg2) {

                // TODO 自動生成されたメソッド・スタブ

            }

            @Override
            public void onUserListDeletion(User arg0, UserList arg1) {

                // TODO 自動生成されたメソッド・スタブ

            }

            @Override
            public void onUserListCreation(User arg0, UserList arg1) {

                // TODO 自動生成されたメソッド・スタブ

            }

            @Override
            public void onUnfavorite(User arg0, User arg1, Status arg2) {

                // TODO 自動生成されたメソッド・スタブ

            }

            @Override
            public void onUnblock(User arg0, User arg1) {

                // TODO 自動生成されたメソッド・スタブ

            }

            @Override
            public void onFriendList(long[] arg0) {

                // TODO 自動生成されたメソッド・スタブ

            }

            @Override
            public void onFollow(User arg0, User arg1) {

                // TODO 自動生成されたメソッド・スタブ

            }

            @Override
            public void onFavorite(User arg0, User arg1, Status arg2) {

                // TODO 自動生成されたメソッド・スタブ

            }

            @Override
            public void onDirectMessage(DirectMessage arg0) {

                // TODO 自動生成されたメソッド・スタブ

            }

            @Override
            public void onDeletionNotice(long arg0, long arg1) {

                // TODO 自動生成されたメソッド・スタブ

            }

            @Override
            public void onBlock(User arg0, User arg1) {

                // TODO 自動生成されたメソッド・スタブ

            }
        });

        stream.user();

        MainViewListPagerAdapter mainViewListPagerAdapter = new MainViewListPagerAdapter(this, this);

        mainViewListPagerAdapter.add(item);
        mainViewListPagerAdapter.add(item2);

        // ViewPager を生成
        ViewPager viewPager = new ViewPager(this);
        viewPager.setAdapter(mainViewListPagerAdapter);

        // レイアウトにセット
        setContentView(viewPager);

        // new Thread(new Runnable() {
        //
        // @Override
        // public void run() {
        //
        // // TODO 自動生成されたメソッド・スタブ
        // ResponseList<Status> list;
        // try {
        // list = twitter.getUserTimeline();
        // } catch (TwitterException ex) {
        // // TODO 自動生成された catch ブロック
        // ex.printStackTrace();
        // return;
        // }
        // for (final Status status : list) {
        // handler.post(new Runnable() {
        //
        // @Override
        // public void run() {
        //
        // // TODO 自動生成されたメソッド・スタブ
        // item.add(status.getText());
        //
        // }
        // });
        // }
        //
        // }
        // }).start();

    }

    @Override
    public void onDestroy() {

        super.onDestroy();
        if (stream != null) {
            stream.shutdown();
        }

    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {

        // TODO 自動生成されたメソッド・スタブ
        Log.e("LOG", "touch");

        return false;
    }

}
